home *** CD-ROM | disk | FTP | other *** search
/ Alles Voor Internet / Tout Pour Internet / alles voor internet.iso / MacInternet™ / Telnet / Comet.3.0.7 Folder / ibm-host-software / FT3270.ASSEMBLE < prev    next >
Text File  |  1992-09-09  |  90KB  |  1,117 lines

  1. FT3270   TITLE 'TRANSFER FILES TO/FROM A PERSONAL COMPUTER'          XA 00010000
  2. *********************************************************************   00020000
  3. *     THIS PROGRAM IS THE USER PORTION OF THE FT3270 FILE TRANSFER  *   00030000
  4. *  PROGRAMS BETWEEN CMS AND THE IBM PC & THE APPLE MACINTOSH. IT    *   00040000
  5. *  INITIATES A FILE TRANSFER BY SENDING SPECIAL CHARACTERS IN THE   *   00050000
  6. *  DATASTREAM WHICH ARE INTERPRETED BY BOTH TN3270 AND C19 ON THE   *   00060000
  7. *  MICROS WHICH HAVE FT3270 SERVERS LINKED INTO THE MICRO COMPUTER  *   00070000
  8. *  EXECUTABLE PROGRAM.                                              *   00080000
  9. *                                                                   *   00090000
  10. *     FT3270 WORKS WITH CORNELL TN3270 ON THE MICRO COMPUTERS AS    *   00100000
  11. *  WELL AS CORNELL C19 WHICH IS A SERIAL PORT EMULATOR SIMILAR TO   *   00110000
  12. *  HEATH19 WHICH USES AN IBM 7171 AS A FRONT END TRANSLATOR. THE    *   00120000
  13. *  7171 IMPOSES SOME REQUIREMENTS ON THE DATASTREAM TO INFORM IT    *   00130000
  14. *  THAT THE DATA IS TO PASSED TRANSPARENTLY TO THE OTHER END. THESE *   00140000
  15. *  EXTRA CHARACTERS ARE NOT STRIPPED OFF BY TELNET SO THEY SHOW UP  *   00150000
  16. *  ON THE OTHER END WHEN ACCESS IS VIA TN3270.                      *   00160000
  17. *                                                                   *   00170000
  18. *     THERE ARE A FEW ROUTINES ON THE MICRO SIDE THAT ARE UNIQUE    *   00180000
  19. *  TO EACH OF THE PROGRAMS. THEY RESOLVE THE DIFFERENCES IN THE     *   00190000
  20. *  DATASTREAMS BETWEEN THE TWO ACCESS METHODS. THE REST OF THE      *   00200000
  21. *  FT3270 SERVER CODE RESIDES IN A COMMON LIBRARY IN THE MICRO      *   00210000
  22. *  SOURCE CODE DEVELOPMENT ENVIRONMENT.                             *   00220000
  23. *                                                                   *   00230000
  24. *     FT3270 STILL NEEDS TO KNOW WHETHER IT IS TALKING VIA TN3270   *   00240000
  25. *  OR C19 IN ORDER TO DETERMINE BUFFER SIZES AND DATA FORMATTING.   *   00250000
  26. *  THE MICRO RETURNS THIS INFORMATION IN THE FIRST PACKET.          *   00260000
  27. *                                                                   *   00270000
  28. *     FT3270 CONSISTS OF THREE CMS SOURCE MODULES:                  *   00280000
  29. *                                                                   *   00290000
  30. *  1. FT3270 CONTAINS CODE GOVERNING THE FOLLOWING:                 *   00300000
  31. *       A) SETTING UP THE APPLICATION ENVIRONMENT                   *   00310000
  32. *       B) ESTABLISHING CONTACT WITH THE MICRO COMPUTER             *   00320000
  33. *       C) NEGOTIATING FILE TRANSFER WITH THE FT3270 SERVER         *   00330000
  34. *       D) COPYING DATA BETWEEN CMS BUFFER AND FT3270 BUFFER        *   00340000
  35. *       E) EBCDIC/ASCII TRANSLATION                                 *   00350000
  36. *       F) SENDING & RECEIVING OF DATA VIA FULL SCREEN INTERFACE    *   00360000
  37. *       G) CLOSING CONTACT WITH MICRO & RETURN TO CMS               *   00370000
  38. *  2. FTCMS HAS 2 ENTRY POINTS:                                     *   00380000
  39. *       A) FTCMS IS CALLED INITIALLY TO PROCESS THE COMMAND LINE    *   00390000
  40. *          PARAMETERS, VERIFY THEIR VALIDITY, AND SET SOME GLOBALS. *   00400000
  41. *       B) FTFS IS CALLED TO EXECUTE THE FS- MACROS.                *   00410000
  42. *  3. FTERR CONTAINS THE TEXT OF ALL OF THE ERROR MESSAGES.         *   00420000
  43. *                                                                   *   00430000
  44. *     THE SUBROUTINE "CENTRAL" IN THIS MODULE IS THE BRIDGE BETWEEN *   00440000
  45. *  THE DATA BUFFERING ROUTINES AND THE DATA TRANSMISSION ROUTINES.  *   00450000
  46. *  CURRENT BUFFER SIZES ARE SMALL ENOUGH TO ALLOW FOR WORST CASE    *   00460000
  47. *  EXPANSION OF ILLEGAL CHARACTERS.                                 *   00470000
  48. *                                                                   *   00480000
  49. *     ADDITIONAL DOCUMENTATION HAS BEEN WRITTEN ON THE FT3270       *   00490000
  50. *  PROTOCOL ITSELF.                                                 *   00500000
  51. *                                                                   *   00510000
  52. *            PETER HOYT          CORNELL COMPUTER SERVICES          *   00520000
  53. *            VERSION 2.0         AUGUST 30, 1987                    *   00530000
  54. *                                                                   *XA 00540000
  55. *        MODIFIED TO PROVIDE SUPPORT FOR RUNNING IN AN XA-MODE      *XA 00550000
  56. *  VIRTUAL MACHINE.  THIS SOURCE FILE WAS ALSO SEQUENCED.           *XA 00560000
  57. *        THIS CODE ALSO COMMUNICATES WITH 'COMET' ON THE MAC.       *XA 00570000
  58. *  LARRY CHACE, CORNELL INFORMATION TECHNOLOGIES, 26 SEPT 1991      *XA 00580000
  59. *                                                                   *XA 00590000
  60. *********************************************************************   00600000
  61.          EJECT                                                          00610000
  62. FT3270   CSECT                                                          00620000
  63.          EXTRN FTCMS                                                    00630000
  64.          EXTRN FTERR                                                    00640000
  65.          EXTRN FTFS                                                     00650000
  66.          USING FT3270,R12                                               00660000
  67.          USING NUCON,R0                                                 00670000
  68. *                                                                       00680000
  69.          STM   R14,R12,12(R13)     SAVE THE CALLER'S THINGS.            00690000
  70.          LR    R12,R15             GET OUR BASE ADDRESS.                00700000
  71.          B     AROUND    SKIP OUR EYECATCHER.                        XA 00710000
  72.          SPACE 1                                                     XA 00720000
  73. ICATCHER DC    C'FT3270 1.00  &SYSDATE &SYSTIME '                    XA 00730000
  74.          SPACE 1                                                     XA 00740000
  75. AROUND   DS    0H                                                    XA 00750000
  76.          ST    R13,SAVEAREA+4      SAVE HIS SAVE AREA AND               00760000
  77.          LA    R13,SAVEAREA          GET OURS.                          00770000
  78. *                                                                       00780000
  79.          LA    R11,FTCOMMON                                             00790000
  80.          L     R15,=A(FTCMS)                                            00800000
  81.          BALR  R14,R15             PROCESS PARAMETERS                   00810000
  82.          LTR   R15,R15             CHECK RETURN CODE                    00820000
  83.          BNZ   ADONE                                                    00830000
  84.          BAL   R14,SETUP           SET NEW PSW & GET CONSOLE ADDRESS    00840000
  85.          BAL   R14,ESTAB           ESTABLISH A CONNECTION WITH PC       00850000
  86.          CLI   UPDOWN,C'D'         DECIDE ON WHICH DIRECTION            00860000
  87.          BZ    DOWNLOAD              TO MOVE THE FILE.                  00870000
  88.          B     UPLOAD                                                   00880000
  89. *                                                                       00890000
  90. DONE     BAL   R14,UNNEGOT         IF EVERYTHING WENT OK                00900000
  91.          BAL   R14,TERM                                                 00910000
  92.          L     R13,4(,R13)         RESTORE EVERYTHING                   00920000
  93.          LM    R14,R12,12(R13)       FROM THE CALLER                    00930000
  94.          SR    R15,R15               AND RETURN WITH                    00940000
  95.          BR    R14                   A NICE CODE.                       00950000
  96. *                                                                       00960000
  97. ****  PUT OUT ERROR MESSAGE & RETURN WITH A NON-ZERO RETURN CODE        00970000
  98. *                                                                       00980000
  99. PDONE    BAL   R14,UNNEGOT         TELL PC TO BECOME A TERMINAL AGAIN   00990000
  100. TDONE    BAL   R14,TERM            RESTORE PSW & MESSAGES               01000000
  101.          L     R2,RETCMS                                                01010000
  102.          L     R3,RETCODE                                               01020000
  103.          L     R15,=A(FTERR)                                            01030000
  104.          BALR  R14,R15             RC RETURNED IN R15                   01040000
  105. ADONE    L     R13,4(,R13)         RESTORE EVERYTHING                   01050000
  106.          L     R14,12(R13)           FROM THE CALLER                    01060000
  107.          LM    R0,R12,20(R13)        EXCEPT R15!                        01070000
  108.          BR    R14                                                      01080000
  109.          EJECT                                                          01090000
  110. *---------------------------------------------------------------------* 01100000
  111. *              ERROR HANDLER                                          * 01110000
  112. *---------------------------------------------------------------------* 01120000
  113. REALTERM DS    0H                                                       01130000
  114.          MVI   RETCODE+3,60          COME HERE IF NOT A 3270.           01140000
  115.          B     TDONE                                                    01150000
  116. LOSTTN   MVI   RETCODE+3,61          SOMEHOW LOST PC.                   01160000
  117.          B     PDONE                                                    01170000
  118. GONEAWAY MVI   RETCODE+3,62          FAILURE IN IOREQ ROUTINE           01180000
  119.          B     PDONE                                                    01190000
  120. USERHLT  MVI   RETCODE+3,63          USER PA1 KEY                       01200000
  121.          B     PDONE                                                    01210000
  122. MUSTQUIT MVI   RETCODE+3,122         PF10 (X'7A') PC ABORT              01220000
  123.          B     TDONE                                                    01230000
  124. BADVER1  MVI   RETCODE+3,64          PC REJECTS OUR VERSION NO.         01240000
  125.          B     PDONE                                                    01250000
  126. BADVER2  MVI   RETCODE+3,65          WE REJECT PC'S VERSION NO.         01260000
  127.          B     PDONE                                                    01270000
  128. BADNEGO  MVI   RETCODE+3,66          CHKSUM ERROR DURING NEGOTIATIONS   01280000
  129.          B     PDONE                                                    01290000
  130. BADFMT   MVI   RETCODE+3,67          INVALID INTERNAL DATA STRUCTURE    01300000
  131.          B     PDONE                                                    01310000
  132. NOMEM    MVI   RETCODE+3,50          DMSFREE FAILURE                    01320000
  133.          B     TDONE                                                    01330000
  134. TOOBIG   MVI   RETCODE+3,51          NOT ENOUGH CMS DISK SPACE          01340000
  135.          B     PDONE                                                    01350000
  136. FSRERR   MVI   RETCODE+3,53        FSREAD FAILURE                       01360000
  137.          ST    R15,RETCMS                                               01370000
  138.          B     PDONE                                                    01380000
  139. FSWER    MVI   RETCODE+3,54        FSWRITE FAILURE                      01390000
  140.          ST    R15,RETCMS                                               01400000
  141.          B     PDONE                                                    01410000
  142.          EJECT                                                          01420000
  143. *---------------------------------------------------------------------* 01430000
  144. *    1)  GET BUFFER SPACE FROM CMS MEMORY MANAGEMENT.                 * 01440000
  145. *    2)  GET READY TO DO FULL SCREEN I/O                              * 01450000
  146. *    3)  TURN OFF MESSAGES                                            * 01460000
  147. *        ON EXIT: R10 POINTS TO CMS READ/WRITE BUFFER                 * 01470000
  148. *                 R11 POINTS TO FT3270 COMMUNICATIONS BUFFER          * 01480000
  149. *---------------------------------------------------------------------* 01490000
  150. SETUP    DS    0H                                                       01500000
  151.          L     R0,DW64K            GET 64K FOR CMS READ/WRITE BUFFER.   01510000
  152.          DMSFREE DWORDS=(0),ERR=NOMEM                                   01520000
  153.          LR    R10,R1                                                   01530000
  154.          L     R0,DW16K            GET 16K FOR FT3270 BUFFER.           01540000
  155.          DMSFREE DWORDS=(0),ERR=NOMEM                                   01550000
  156.          LR    R11,R1                                                   01560000
  157.          SLL   R0,2                MAKE R0 CONTAIN X'2000'              01570000
  158.          AR    R1,R0                 TO POINT US 8K INTO BUFFER.        01580000
  159.          ST    R1,TBUFFER          USE THIS 8K FOR TEMPORARY BUFFER.    01590000
  160. *                                                                       01600000
  161. * CONSTRUCT SOME NEW PSWS SO THAT WE CAN GET CONTROL.                XA 01610000
  162. *                                                                    XA 01620000
  163.          DMSEXS OC,IOWPSW(4),X'20' SNEAKILY DO A 'STORE PSW'.        XA 01630000
  164.          ENABLE INTTYPE=NONE       MAKE SURE WE HAVE QUIET.          XA 01640000
  165.          DMSKEY NUCLEUS            ENTER THE POWERFUL STATE.            01650000
  166.          LA    R1,IOWAKE           GET OUR INTERRUPT ADDRESS.        XA 01660000
  167.          MVC   XIONPSW,X'78'       SAVE THE PREVIOUS I/O NEW PSW        01670000
  168.          ST    R1,X'7C'              AND TAKE OVER.                  XA 01680000
  169.          MVC   XEXNPSW,X'58'       SAVE THE PREVIOUS EXT NEW PSW        01690000
  170.          ST    R1,X'5C'              AND TAKE OVER.                  XA 01700000
  171.          DMSKEY RESET              RETURN TO NORMAL POWER.              01710000
  172. *                                                                       01720000
  173.          L     R1,=F'-1'           GO FIND THE                          01730000
  174.          DIAG  R1,R2,X'24'           CONSOLE ADDRESS.                   01740000
  175.          BNZ   REALTERM            IF DISCONNECTED, COMPLAIN.        XA 01750000
  176.          ST    R1,XTERMADD         SAVE THE CONSOLE ADDRESS,            01760000
  177.          MVI   XTERMADD,0            AND BE SURE IT IS PURE.            01770000
  178.          CLM   R3,B'1000',=X'40'   IF IT IS NOT A 3270,                 01780000
  179.          BNE   REALTERM              THEN GO COMPLAIN LOUDLY.           01790000
  180. *                                                                       01800000
  181.          LA    R1,CPMSGOFF                                              01810000
  182.          LA    R2,CPOFFLEN                                              01820000
  183.          DIAG  R1,R2,X'08'         TURN OFF MESSAGES.                   01830000
  184.          SPACE 1                                                        01840000
  185. * FOR XA MODE, WE MUST FIND THE SUBCHANNEL FOR THE CONSOLE.          XA 01850000
  186.          TM    NUCMFLAG,NUCMXA     IF WE ARE NOT IN XA MODE,         XA 01860000
  187.          BNO   SET190                THEN WE ARE DONE HERE.          XA 01870000
  188.          L     R1,=X'00010000'     GET THE FIRST SUBCHANNEL.         XA 01880000
  189. SET100   DS    0H                                                    XA 01890000
  190.          STSCH SCHIB               TRY THIS SUBCHANNEL AND           XA 01900000
  191.          BC    1,REALTERM            COMPLAIN IF NO CONSOLE.         XA 01910000
  192.          TM    SCHCTL,SCHVLD       IF THIS IS NOT A VALID DEVICE,    XA 01920000
  193.          BNO   SET110                THEN GO TRY THE NEXT ONE.       XA 01930000
  194.          SPACE 1                                                     XA 01940000
  195.          CLC   SCHDEV,XTERMADD+2   IF THIS IS THE TERMINAL,          XA 01950000
  196.          BE    SET120                THEN WE CAN STOP LOOKING.       XA 01960000
  197. SET110   DS    0H                                                    XA 01970000
  198.          LA    R1,=F'1'            GET THE NEXT SUBCHANNEL NUMBER    XA 01980000
  199.          B     SET100                AND KEEP ON SEARCHING.          XA 01990000
  200.          SPACE 1                                                     XA 02000000
  201. SET120   DS    0H                                                    XA 02010000
  202.          ST    R1,TIOSUBCH         SAVE THE TERMINAL SUBCHANNEL.     XA 02020000
  203. SET190   DS    0H                                                    XA 02030000
  204.          SPACE 1                                                     XA 02040000
  205.          BR    14                                                       02050000
  206.          EJECT                                                          02060000
  207. *---------------------------------------------------------------------* 02070000
  208. *        TERMINATION: DMSFRET, RESTORE PSW, TURN MESSAGES ON          * 02080000
  209. *---------------------------------------------------------------------* 02090000
  210. TERM     DS    0H                                                       02100000
  211.          L     R0,DW64K            FREE 64K                             02110000
  212.          LR    R1,R10              THE CMS READ/WRITE BUFFER            02120000
  213.          DMSFRET DWORDS=(0),LOC=(1)                                     02130000
  214. *                                                                       02140000
  215.          L     R0,DW16K            FREE 16K                             02150000
  216.          LR    R1,R11              THE FT3270 TRANSFER BUFFER           02160000
  217.          DMSFRET DWORDS=(0),LOC=(1)                                     02170000
  218. *                                                                       02180000
  219.          DMSKEY NUCLEUS            BECOME POWERFUL FOR NOW.             02190000
  220.          MVC   X'78'(8),XIONPSW    RESTORE THE PSW.                     02200000
  221.          MVC   X'58'(8),XEXNPSW    RESTORE THE PSW.                     02210000
  222.          DMSKEY RESET              RETURN TO NORMAL.                    02220000
  223. *                                                                       02230000
  224.          LA    R1,CPMSGON                                               02240000
  225.          LA    R2,CPONLEN                                               02250000
  226.          DIAG  R1,R2,X'08'         TURN MESSAGES BACK ON.               02260000
  227.          BR    14                  ALL DONE NOW.                        02270000
  228.          EJECT                                                          02280000
  229. *---------------------------------------------------------------------* 02290000
  230. *            ESTABLISH CONNECTION WITH PC RUNNING FT3270.             * 02300000
  231. *  USE SPECIAL HANDSHAKING TO CONVERT PC INTO FILE TRANSFER MACHINE   * 02310000
  232. *---------------------------------------------------------------------* 02320000
  233. ESTAB    DS    0H                                                       02330000
  234.          ST    R14,XESTA14         SAVE OUR RETURN POINTER.             02340000
  235.          LA    R0,ZERASE           CLEAR THE SCREEN TO ALLOW            02350000
  236.          BAL   R14,IOREQ             FULL-SCREEN OPERATIONS.            02360000
  237. *                                                                       02370000
  238.          MVC   ZLENGTH(73),XESTAB  SPECIAL FIELD FOR INITIAL CONTACT    02380000
  239.          LA    R8,80               7 + 73                               02390000
  240.          STH   R8,ZSND+6           COMPLETE THE CCW                     02400000
  241.          LA    R0,ZSND             POINT TO THE CCW AND                 02410000
  242.          BAL   R14,IOREQ             GO WRITE IT.                       02420000
  243.          BAL   R14,IOWAIT          WAIT FOR AN ATTENTION.               02430000
  244.          LA    R0,ZRCV             CCW FOR READ.                        02440000
  245.          BAL   R14,IOREQ           GET THE BUFFER FROM THE PC.          02450000
  246.          CLI   ZRCVBUFF,X'E8'      THIS BYTE'S FOR 7171!                02460000
  247.          BNZ   REALTERM                                                 02470000
  248.          CLI   ZLENGTH,X'FD'                                            02480000
  249.          BNZ   REALTERM                                                 02490000
  250. *                                                                       02500000
  251.          NI    ZLENGTH+2,X'7F'                                          02510000
  252.          LA    R9,C19FTLEN         DEFAULT SMALL BUFFERS                02520000
  253.          MVC   C19FLAG(1),ZLENGTH+2                                     02530000
  254.          CLI   C19FLAG,X'00'       SEE WHETHER WE ARE RUNNING TN        02540000
  255.          BNZ   ESTAB3                                                   02550000
  256.          LA    R9,TNFTLEN                                               02560000
  257. ESTAB3   ST    R9,FTLEN            STORE DOWNLOAD BUFFER SIZE           02570000
  258. *                                                                       02580000
  259.          L     R14,XESTA14         RESTORE RETURN REGISTER.             02590000
  260.          NI    ZLENGTH+1,X'7F'                                          02600000
  261.          CLC   ZLENGTH+1(1),ESCCHAR   DID PC REJECT OUR VERSION NUMBER? 02610000
  262.          BZ    BADVER1                                                  02620000
  263.          LA    R9,VTABLE           SEE IF WE ACCEPT PC'S VERSION NO.    02630000
  264. *                                                                       02640000
  265. ESTAB2   CLI   0(R9),X'FF'         END OF TABLE?                        02650000
  266.          BZ    BADVER2                                                  02660000
  267.          IC    R3,0(,R9)                                                02670000
  268.          CLC   0(1,R9),ZLENGTH+1   IS IT IN THE TABLE?                  02680000
  269.          BZR   R14                 IF SO, RETURN.                       02690000
  270.          LA    R9,1(,R9)           NEXT TABLE ENTRY                     02700000
  271.          B     ESTAB2                                                   02710000
  272.          EJECT                                                          02720000
  273. *---------------------------------------------------------------------* 02730000
  274. *    THIS ROUTINE CONTROLS THE UPLOADING OF A FILE FROM THE PC.       * 02740000
  275. *     REG. USAGE: R6 & R7 ARE INDICES INTO BUFFERS (R10 & R11).       * 02750000
  276. *                 R8 IS LOOP COUNTER FOR PROCESSING OF PC BUFFER.     * 02760000
  277. *                 R2 IS USED TO CALL FS ROUTINES.                     * 02770000
  278. *                 R3 IS USED TO LOAD & TRANSLATE THE RECEIVED BYTE.   * 02780000
  279. *                 R5 IS USED TO BASE THE ASCII/EBCDIC XLATE TABLE.    * 02790000
  280. *                 R9 IS TO TEST WHEN CMS BUFFER FULL (LRECL OR EOR).  * 02800000
  281. *---------------------------------------------------------------------* 02810000
  282. UPLOAD   DS    0H                                                       02820000
  283.          MVI   NEGO+1,X'0A'        NEGOTIATE WITH PC                    02830000
  284.          BAL   R14,NEGOTY                                               02840000
  285.          L     R3,2(,R11)          GET FILESIZE IN BYTES                02850000
  286.          C     R3,BYTELEFT         SEE IF SPACE ON CMS DISK.            02860000
  287.          BC    2,TOOBIG                                                 02870000
  288.          SR    R6,R6               RESET OUTPUT RECORD LENGTH.          02880000
  289.          SR    R3,R3               CLEAR CHARACTER BUFFER.              02890000
  290.          LA    R5,EBCDTAB          ASCII/EBCDIC XLATE TABLE             02900000
  291. *                                                                       02910000
  292. UP0      BAL   R14,SHIPUP          GET ANOTHER BUFFER FROM THE PC.      02920000
  293.          LTR   R8,R8               ARE WE DONE?                         02930000
  294.          BNZ   UP1                 NOPE, CONTINUE.                      02940000
  295.          LTR   R6,R6               SEE IF ANY DATA REMAINING            02950000
  296.          BZ    UP8                 IF NOT THEN CLOSE THE FILE.          02960000
  297.          CLI   CRECFM+3,C'V'       FIXED OR VARIABLE?                   02970000
  298.          BZ    UP6                 JUST WRITE WHAT WE'VE GOT.           02980000
  299.          L     R9,CLRECL           GET FIXED RECORD LENGTH.             02990000
  300.          B     UP2                 PROCESS AS EOR.                      03000000
  301. *                                                                       03010000
  302. UP1      IC    R3,1(R7,R11)        GET NEXT CHARACTER                   03020000
  303.          L     R9,CLRECL           DEFAULT WRITE RECORD LENGTH.         03030000
  304.          CLI   BINTEXT,C'B'        NO LINEFEED OR XLATE IN BINARY FILE! 03040000
  305.          BZ    UP5                                                      03050000
  306.          CLM   R3,1,HEXEOR         LOOK FOR LINE FEED ON TEXT FILES.    03060000
  307.          BZ    UP2                                                      03070000
  308.          IC    R3,0(R3,R5)         PERFORM XLATE.                       03080000
  309.          B     UP5                 GO STORE THE CHARACTER.              03090000
  310. *                                                                       03100000
  311. UP2      IC    R3,=C' '            GET THE PAD CHARACTER.               03110000
  312.          CLI   CRECFM+3,C'F'       FIXED OR VARIABLE?                   03120000
  313.          BZ    UP3                                                      03130000
  314.          LA    R9,1(,R6)           FORCE THIS VARIABLE RECORD OUT.      03140000
  315.          LTR   R6,R6               IS THIS A ZERO LENGTH RECORD?        03150000
  316.          BZ    UP5                 PAD ONE BLANK TO CREATE A RECORD.    03160000
  317.          B     UP6                 JUST WRITE IT OUT AS IS.             03170000
  318. *                                                                       03180000
  319. UP3      CLI   WRFLAG,X'0'         WAS LAST WRITE WITH FULL BUFFER?     03190000
  320.          BNZ   UP7                 YES, IGNORE THIS NEWLINE CHARACTER.  03200000
  321.          MVI   WRFLAG,X'0'         RESET FIXED LENGTH FULL FLAG.        03210000
  322.          SR    R9,R6               NUMBER OF BYTES LEFT TO FILL.        03220000
  323. UP4      STC   R3,0(R6,R10)        OTHERWISE STORE A BLANK              03230000
  324.          LA    R6,1(,R6)            & INC. POINTER.                     03240000
  325.          BCT   R9,UP4              DO UNTIL RECORD IS FULL.             03250000
  326.          B     UP6                                                      03260000
  327.          EJECT                                                          03270000
  328. *---------------------------------------------------------------------* 03280000
  329. *          ...... CONTINUATION OF UPLOAD ROUTINE .......              * 03290000
  330. *     THIS IS NORMAL CONTINUATION AFTER GETTING NEXT CHARACTER;       * 03300000
  331. *     IE: ALWAYS BINARY FILES & TEXT FILES WITH OTHER THAN NEWLINE.   * 03310000
  332. *---------------------------------------------------------------------* 03320000
  333. UP5      STC   R3,0(R6,R10)        STORE THE CHARACTER                  03330000
  334.          LA    R6,1(,R6)            AND INCREMENT LENGTH.               03340000
  335.          CR    R6,R9               IS CMS WRITE BUFFER FULL YET?        03350000
  336.          BNZ   UP7                 NO, SO CONTINUE.                     03360000
  337.          MVI   WRFLAG,X'1'         SET FIXED LENGTH FULL FLAG.          03370000
  338. *                                                                       03380000
  339. UP6      LA    R2,2                DO AN FSWRITE                        03390000
  340.          L     R3,CRECFM           FIXED OR VARIABLE                    03400000
  341.          L     R15,=A(FTFS)        EXTERNAL ROUTINE FOR FS CALLS        03410000
  342.          BALR  R14,R15                                                  03420000
  343.          LTR   R15,R15             CHECK RETURN CODE                    03430000
  344.          BNZ   FSWER                                                    03440000
  345.          SR    R6,R6               RESET RECORD LENGTH                  03450000
  346. *                                                                       03460000
  347. UP7      LA    R7,1(,R7)           NEXT CHARACTER FROM PC               03470000
  348.          S     R8,=F'1'            BYTES LEFT IN PC BUFFER              03480000
  349.          BC    2,UP1               LOOP UNTIL NO MORE FROM PC           03490000
  350.          BC    8,UP0               GET MORE DATA FROM PC                03500000
  351. *                                                                       03510000
  352. UP8      LA    R2,3                DO AN FSCLOSE                        03520000
  353.          L     R15,=A(FTFS)        EXTERNAL ROUTINE FOR FS CALLS        03530000
  354.          BALR  R14,R15                                                  03540000
  355.          B     DONE                                                     03550000
  356. *---------------------------------------------------------------------* 03560000
  357. *        LET THE PC SEND US ANOTHER PACKET OF DATA                    * 03570000
  358. *        RETURNS A NUMBER OF BYTES TO PROCESS IN R8                   * 03580000
  359. *---------------------------------------------------------------------* 03590000
  360. SHIPUP   DS    0H                                                       03600000
  361.          ST    R14,SHIP14                                               03610000
  362.          MVI   NEGO+1,X'0A'        FIRST REQUEST IS NOT A RETRANSMIT    03620000
  363. SU0      LA    R1,NEGO                                                  03630000
  364.          LA    R8,2                                                     03640000
  365.          BAL   R14,CENTRAL         COMMUNICATIONS INTERFACE ROUTINE     03650000
  366.          LTR   R8,R8               LENGTH OF RETURNED PACKET            03660000
  367.          BZ    SU1                 WE'LL REQUEST RE-XMISSION            03670000
  368. *                                                                       03680000
  369.          CLI   0(R11),X'7D'        ENTER INDICATES OK XFER.             03690000
  370.          BZ    SU4                                                      03700000
  371.          CLI   0(R11),X'6E'        PA2 INDICATES EOF                    03710000
  372.          BZ    SU3                 RETURN A ZERO LENGTH.                03720000
  373.          CLI   0(R11),X'6B'        SEE IF "PA3" WAS RETURNED.           03730000
  374.          BZ    SU0                 RE-TRANSMIT THE REQUEST              03740000
  375. SU1      MVI   NEGO+1,X'0B'        RETRANSMIT CODE                      03750000
  376.          B     SU0                                                      03760000
  377. *                                                                       03770000
  378. SU3      LA    R8,1                COME HERE IF EOF HAS OCCURRED.       03780000
  379. SU4      BCTR  R8,0                RC DOSEN'T COUNT TOWARD LENGTH       03790000
  380.          SR    R7,R7               RESET INDEX INTO PC BUFFER.          03800000
  381.          L     R14,SHIP14          RESTORE & RETURN.                    03810000
  382.          BR    R14                                                      03820000
  383.          EJECT                                                          03830000
  384. *---------------------------------------------------------------------* 03840000
  385. *     THIS ROUTINE CONTROLS THE DOWNLOADING OF A FILE TO THE PC.      * 03850000
  386. *     REG. USAGE: R6 & R7 ARE INDICES INTO BUFFERS (R10 & R11).       * 03860000
  387. *                 R4 IS LOOP COUNTER FOR PROCESSING OF CMS BUFFER.    * 03870000
  388. *                 R9 IS LOOP COUNTER FOR FSREAD.                      * 03880000
  389. *                 R3 IS USED TO LOAD & TRANSLATE THE BYTE TO SEND.    * 03890000
  390. *                 R5 IS USED TO BASE THE EBCDIC/ASCII XLATE TABLE.    * 03900000
  391. *                 R2 IS USED TO CALL FSREAD.                          * 03910000
  392. *                 R8 & R1 ARE USED BY LOWER LEVEL ROUTINES.           * 03920000
  393. *---------------------------------------------------------------------* 03930000
  394. DOWNLOAD DS    0H                                                       03940000
  395.          MVC   NEGO+2(4),NUMBYTES  FILESIZE TO DOWNLOAD                 03950000
  396.          MVI   NEGO+1,X'08'        NEGOTIATE WITH PC                    03960000
  397.          BAL   R14,NEGOTY                                               03970000
  398.          SR    R7,R7               INDEX INTO R11 (PC BUFFER)           03980000
  399.          SR    R3,R3               CLEAR CHARACTER BUFFER.              03990000
  400.          LA    R5,ASCIITAB         EBCDIC/ASCII XLATE TABLE             04000000
  401.          L     R9,XNOREC           NUMBER OF CMS RECORDS TO READ        04010000
  402.          MVC   0(2,R11),=X'0808'   INDICATES DOWNLOAD                   04020000
  403. *                                                                       04030000
  404. DV0      LA    R2,1                DO AN FSREAD                         04040000
  405.          L     R15,=A(FTFS)        EXTERNAL ROUTINE FOR FS CALLS        04050000
  406.          BALR  R14,R15                                                  04060000
  407.          LTR   R15,R15             CHECK RETURN CODE                    04070000
  408.          BNZ   FSRERR                                                   04080000
  409. *                                                                       04090000
  410.          LR    R4,R0               NUMBER OF BYTES READ FROM CMS        04100000
  411.          SR    R6,R6               INDEX INTO R10 (CMS BUFFER)          04110000
  412.          CLI   BINTEXT,C'B'        GET RID OF TRAILING BLANKS           04120000
  413.          BZ    DV1                 NO STRIPPING OF BINARY FILES         04130000
  414. *                                                                       04140000
  415. SO1      S     R4,=F'1'            LAST BYTE IS BASE + (LEN - 1)        04150000
  416.          BC    4,DV2               IF < 0, RECORD IS ALL BLANKS         04160000
  417.          IC    R3,0(R4,R10)                                             04170000
  418.          CLM   R3,1,=X'40'         TEST FOR NON BLANK                   04180000
  419.          BZ    SO1                 WE FOUND ANOTHER BLANK               04190000
  420.          LA    R4,1(,R4)           RESTORE CORRECT LENGTH               04200000
  421. *                                                                       04210000
  422. DV1      IC    R3,0(R6,R10)        GET NEXT CHARACTER FROM CMS BUFFER.  04220000
  423.          CLI   BINTEXT,C'B'        DECIDE WHETHER TO DO XLATE.          04230000
  424.          BZ    DV21                NOT FOR BINARY FILES                 04240000
  425.          IC    R3,0(R3,R5)         GET TABLE ENTRY.                     04250000
  426. *                                                                       04260000
  427. DV21     STC   R3,2(R7,R11)        PUT BYTE INTO PC BUFFER.             04270000
  428.          LA    R6,1(,R6)           INCREMENT INDICES.                   04280000
  429.          LA    R7,1(,R7)                                                04290000
  430.          C     R7,FTLEN            BUFFER FULL YET?                     04300000
  431.          BC    4,DV11              NO                                   04310000
  432.          MVI   1(R11),X'08'        INDICATE NOT LAST PACKET.            04320000
  433.          BAL   R14,SHIPDOWN        YES, SO SEND IT TO THE PC            04330000
  434. DV11     BCT   R4,DV1              LOOP WHILE NON TRAILING BLANKS       04340000
  435.          EJECT                                                          04350000
  436. *---------------------------------------------------------------------* 04360000
  437. *      .....CONTINUATION OF DOWNLOAD ROUTINE.....                     * 04370000
  438. *      WE COME HERE WHEN WE HAVE REACHED THE END OF A CMS RECORD.     * 04380000
  439. *---------------------------------------------------------------------* 04390000
  440. DV2      CLI   BINTEXT,C'B'        NO LINEFEED INSERTED IN BINARY FILE! 04400000
  441.          BZ    DV4                                                      04410000
  442.          IC    R3,HEXEOR           USE ASCII LF TO INDICATE EOR.        04420000
  443.          STC   R3,2(R7,R11)        STORE IT & BUMP INDEX.               04430000
  444.          LA    R7,1(,R7)                                                04440000
  445. *                                                                       04450000
  446. DV4      BCT   R9,DV0              GET ANOTHER RECORD IF AVAILABLE      04460000
  447.          MVI   1(R11),X'09'        INDICATE LAST PACKET.                04470000
  448.          BAL   R14,SHIPDOWN        DOWNLOAD THE LAST OF THE DATA        04480000
  449.          B     DONE                                                     04490000
  450. *---------------------------------------------------------------------* 04500000
  451. *   THIS ROUTINE CUTS A SCREEN LOOSE TO THE PC                        * 04510000
  452. *   R7 CONTAINS LENGTH OF BUFFER TO SEND & IS RESET UPON EXIT         * 04520000
  453. *---------------------------------------------------------------------* 04530000
  454. SHIPDOWN DS    0H                                                       04540000
  455.          ST    R14,SHIP14                                               04550000
  456.          LA    R7,2(R7)                                                 04560000
  457. SD0      MVI   0(R11),X'08'        INDICATE FT3270 CODE.                04570000
  458.          LR    R1,R11                                                   04580000
  459.          LR    R8,R7                                                    04590000
  460. SD1      BAL   R14,CENTRAL         COMMUNICATIONS INTERFACE ROUTINE     04600000
  461.          LTR   R8,R8               LENGTH OF RETURNED PACKET            04610000
  462.          BZ    SD3                                                      04620000
  463. *                                                                       04630000
  464.          CLI   0(R11),X'6B'        SEE IF "PA3" WAS RETURNED.           04640000
  465.          BZ    SD0                 RE-TRANSMIT THE DATA                 04650000
  466.          CLI   0(R11),X'7D'        SEE IF "ENTER" WAS RETURNED.         04660000
  467.          BZ    SD5                                                      04670000
  468. SD3      LA    R1,NEGO                                                  04680000
  469.          LA    R8,2                                                     04690000
  470.          MVI   NEGO+1,X'0B'        REQUEST RETRANSMISSION               04700000
  471.          B     SD1                                                      04710000
  472. *                                                                       04720000
  473. SD5      L     R14,SHIP14          RESTORE THE REGISTER                 04730000
  474.          SR    R7,R7               RESET INDEX REGISTER.                04740000
  475.          BR    R14                                                      04750000
  476.          EJECT                                                          04760000
  477. *---------------------------------------------------------------------* 04770000
  478. *        THIS ROUTINE NEGOTIATES FILE TRANSFER WITH THE PC.           * 04780000
  479. *        RESOLVES DEFAULT CONVERSION IF NECESSARY.                    * 04790000
  480. *---------------------------------------------------------------------* 04800000
  481. NEGOTY   DS    0H                                                       04810000
  482.          ST    R14,NEGO14          SAVE OUR RETURN POINTER.             04820000
  483. NEGO1    LA    R1,NEGO                                                  04830000
  484.          L     R8,FSPECLEN                                              04840000
  485.          A     R8,=F'7'            NEGOTIATION HEADER                   04850000
  486.          BAL   R14,CENTRAL         COMMUNICATIONS INTERFACE ROUTINE     04860000
  487.          LTR   R8,R8               LENGTH OF RETURNED PACKET            04870000
  488.          BZ    BADNEGO                                                  04880000
  489. *                                                                       04890000
  490.          CLI   0(R11),X'6B'        SEE IF "PA3" WAS RETURNED.           04900000
  491.          BZ    NEGO1               RESEND THE PACKET                    04910000
  492.          CLI   0(R11),X'7D'        SEE IF "ENTER" WAS RETURNED.         04920000
  493.          BZ    NEGO2                                                    04930000
  494.          MVC   RETCODE+3(1),0(R11)  ERROR NEGOTIATING WITH PC           04940000
  495.          B     PDONE                                                    04950000
  496. *                                                                       04960000
  497. NEGO2    CLI   BINTEXT,C'D'        USING A DEFAULT CONVERSION?          04970000
  498.          BNZ   NEGO3               CONVERSION ALREADY DETERMINED.       04980000
  499.          MVI   BINTEXT,C'B'        LET'S SAY BINARY FOR NOW.            04990000
  500.          CLI   1(R11),X'00'        SEE IF PC AGREES.                    05000000
  501.          BZ    NEGO3                                                    05010000
  502.          MVI   BINTEXT,C'T'        CHANGE IT TO TEXT.                   05020000
  503. *                                                                       05030000
  504. NEGO3    CLI   C19FLAG,X'0'        CONTINUE 8 FOR 7 CONVERSIONS?        05040000
  505.          BZ    NEGO4               NOT IF RUNNING TN.                   05050000
  506.          CLI   BINTEXT,C'B'        IF C19, THEN IS IT BINARY?           05060000
  507.          BZ    NEGO5               IF SO THEN CONTINUE CONVERSIONS.     05070000
  508. NEGO4    MVI   NOSTRIP,X'1'        DO IT NO LONGER.                     05080000
  509. NEGO5    L     R14,NEGO14          RESTORE AND                          05090000
  510.          BR    R14                   RETURN.                            05100000
  511. *---------------------------------------------------------------------* 05110000
  512. *    THIS ROUTINE SENDS THE "UNNEGOTIATION" SEQUENCE TO THE PC        * 05120000
  513. *      AVOID MULTIPLE EXECUTIONS OF THIS DUE TO PC FOUL UP.           * 05130000
  514. *---------------------------------------------------------------------* 05140000
  515. UNNEGOT  DS    0H                                                       05150000
  516.          CLI   UNNFLAG,X'1'        TEST FOR NESTED CALLS                05160000
  517.          BZR   R14                 IF SO, THEN SKIP IT                  05170000
  518.          MVI   UNNFLAG,X'1'        ELSE SET FLAG                        05180000
  519. *                                                                       05190000
  520.          ST    R14,NEGO14          SAVE OUR RETURN POINTER.             05200000
  521.          MVI   NEGO,X'09'          UNNEGOTIATE WITH PC                  05210000
  522.          LA    R1,NEGO                                                  05220000
  523.          LA    R8,1                                                     05230000
  524.          BAL   R14,CENTRAL         COMMUNICATIONS INTERFACE ROUTINE     05240000
  525. *                                                                       05250000
  526.          L     R14,NEGO14          RESTORE AND                          05260000
  527.          BR    R14                   RETURN.                            05270000
  528.          EJECT                                                          05280000
  529. *---------------------------------------------------------------------* 05290000
  530. *     INTERFACE BETWEEN BUFFER PROCESSING & COMMUNICATIONS ROUTINES.  * 05300000
  531. *     THIS SUBROUTINE IS CALLED BY THE HIGHER LEVEL ROUTINE           * 05310000
  532. *         { SHIPUP, SHIPDOWN, NEGOTY, UNNEGOT }                       * 05320000
  533. *     AND IN TURN CALLS ROUTINES TO CONVERT THE DATA TO 7 BITS,       * 05330000
  534. *     CALCULATE CHECKSUM, SEND THE DATA, WAIT FOR RESPONSE, & UNWRAP  * 05340000
  535. *     THE RETURNED DATA.                                              * 05350000
  536. *       ON ENTRY: R1 CONTAINS ADDRESS OF BUFFER TO SEND               * 05360000
  537. *                 R8 CONTAINS THE LENGTH OF THE DATA                  * 05370000
  538. *       ON EXIT:  R8 RETURNS THE LENGTH OF THE RECEIVED DATA OR ZERO  * 05380000
  539. *                    IF AN ERROR HAS BEEN DETECTED.                   * 05390000
  540. *                 ALL OTHER REGISTERS ARE RESTORED.                   * 05400000
  541. *---------------------------------------------------------------------* 05410000
  542. CENTRAL  DS    0H                                                       05420000
  543.          STM   R9,R7,XCENTRAL      SAVE REGISTERS                       05430000
  544.          CLI   NOSTRIP,X'0'        SHALL WE PERFORM 8 FOR 7 CONVERSION? 05440000
  545.          BNZ   CEN1                                                     05450000
  546.          BAL   R14,BITSTRP         CONVERT TO 7 BIT DATA                05460000
  547. CEN1     BAL   R14,COPYOUT         COVER ESCAPE SEQUENCES               05470000
  548.          BAL   R14,SNDPKT          SEND THE DATA                        05480000
  549. *                                                                       05490000
  550.          LTR   R8,R8               LENGTH OF RETURNED PACKET            05500000
  551.          BZ    CEN9                                                     05510000
  552.          CLI   C19FLAG,X'0'        ARE WE RUNNING C19?                  05520000
  553.          BZ    CEN2                                                     05530000
  554.          LA    R1,ZBUFFER          SOURCE BUFFER                        05540000
  555.          LR    R3,R8               LOOP COUNTER                         05550000
  556. CENLOOP  NI    0(R1),X'7F'         GET RID OF HIGH BIT FROM 7171        05560000
  557.          LA    R1,1(,R1)           INC. BUFFER POINTER                  05570000
  558.          BCT   R3,CENLOOP          GO FOR THE NEXT ONE                  05580000
  559. *                                                                       05590000
  560. CEN2     L     R1,TBUFFER          DEFAULT TARGET BUFFER                05600000
  561.          CLI   NOSTRIP,X'0'        WILL WE PERFORM 8 FOR 7 CONVERSION?  05610000
  562.          BZ    CEN3                YES..                                05620000
  563.          LR    R1,R11                ELSE USE FT3270 BUFFER FOR TARGET. 05630000
  564. CEN3     BAL   R14,COPYIN          GET RID OF ESCAPE SEQUENCES          05640000
  565.          LTR   R8,R8               LENGTH OF RETURNED PACKET            05650000
  566.          BZ    CEN9                INDICATES CHKSUM ERROR               05660000
  567.          CLI   NOSTRIP,X'0'        SHALL WE PERFORM 8 FOR 7 CONVERSION? 05670000
  568.          BNZ   CEN4                                                     05680000
  569.          BAL   R14,BITREST         MAKE 8 BYTE DATA ONCE AGAIN          05690000
  570. *                                                                       05700000
  571. CEN4     LM    R9,R7,XCENTRAL      RESTORE REGISTERS.                   05710000
  572.          CLI   0(R11),X'6C'        SEE IF "PA1" WAS RETURNED.           05720000
  573.          BZ    USERHLT                                                  05730000
  574.          CLI   0(R11),X'7A'        SEE IF "PF10" WAS RETURNED.          05740000
  575.          BZ    MUSTQUIT                                                 05750000
  576.          BR    R14                 RETURN DATA OK.                      05760000
  577. CEN9     LM    R9,R7,XCENTRAL      RESTORE &                            05770000
  578.          BR    R14                    RETURN WITH ERROR.                05780000
  579.          EJECT                                                          05790000
  580. *---------------------------------------------------------------------* 05800000
  581. *        ROUTINE TO RESTORE HIGH ORDER BITS FROM EVERY 8TH BYTE.      * 05810000
  582. *        ON ENTRY: R8 CONTAINS LENGTH                                 * 05820000
  583. *        ON EXIT:  R8 CONTAINS NEW LENGTH                             * 05830000
  584. *---------------------------------------------------------------------* 05840000
  585. BITREST  DS    0H                                                       05850000
  586.          L     R1,TBUFFER         SOURCE BUFFER                         05860000
  587.          LR    R2,R11             TARGET BUFFER                         05870000
  588.          LR    R3,R8              LOOP COUNTER                          05880000
  589. *                                                                       05890000
  590. BITR2    LA    R9,8               NUMBER OF BYTES TO CONSIDER AT ONCE   05900000
  591.          SR    R3,R9              REDUCE LENGTH REMAINING               05910000
  592.          BC    10,BITR7           DID NOT GO NEGATIVE                   05920000
  593.          AR    R9,R3              IF IT DID, REDUCE CONSIDERATION       05930000
  594. BITR7    S     R9,=F'1'           WE REALLY ONLY PROCESS 7 BYTES        05940000
  595.          BZ    BADFMT             IF THIS IS ZERO, WE WENT WRONG        05950000
  596.          LA    R5,0(R9,R1)        ADDRESS OF THE BITS BYTE              05960000
  597.          BCTR  R8,0               REAL LENGTH GETS DECREMENTED TOO      05970000
  598. *                                                                       05980000
  599. BITR0    IC    R6,0(,R1)          GET NEXT CHAR                         05990000
  600.          LA    R1,1(,R1)            AND INC. POINTER                    06000000
  601.          TM    0(R5),X'01'        IS THE HIGH BIT ON?                   06010000
  602.          BC    8,BITR1            IF NOT SKIP..                         06020000
  603.          O     R6,=F'128'         ELSE TURN ON HIGH ORDER BIT           06030000
  604. BITR1    IC    R7,0(,R5)          SLIDE THE BIT DOWN.                   06040000
  605.          SRL   R7,1                                                     06050000
  606.          STCM  R7,1,0(R5)         REPLACE THE BIT MAP IN STORAGE        06060000
  607.          STCM  R6,1,0(R2)         PUT BYTE INTO OUTPUT BUFFER           06070000
  608.          LA    R2,1(,R2)            AND INC. POINTER.                   06080000
  609.          BCT   R9,BITR0           GO & GET THE NEXT BYTE.               06090000
  610. *                                                                       06100000
  611.          LA    R1,1(,R1)          MOVE SOURCE PTR PAST BITS BYTE        06110000
  612.          LTR   R3,R3              IS THERE MORE TO DO?                  06120000
  613.          BC    2,BITR2                                                  06130000
  614.          BR    R14                RETURN.                               06140000
  615.          EJECT                                                          06150000
  616. *---------------------------------------------------------------------* 06160000
  617. *    VERIFY CHECKSUM & REPLACE ESCAPE SEQUENCES WITH CORRECT DATA.    * 06170000
  618. *         ON ENTRY: R8 LENGTH OF RECEIVED DATA                        * 06180000
  619. *                   R6 CONTAINS CHECKSUM                              * 06190000
  620. *                   R1 CONTAINS TARGET BUFFER                         * 06200000
  621. *         ON EXIT:  R8 CONTAINS NEW LENGTH (0 IF CHKSUM ERROR)        * 06210000
  622. *---------------------------------------------------------------------* 06220000
  623. COPYIN   DS    0H                                                       06230000
  624.          ST    R14,CISR14                                               06240000
  625.          LR    R5,R6              SAVE CHECKSUM FROM HEADER             06250000
  626.          LA    R2,ZBUFFER         SOURCE BUFFER                         06260000
  627.          BAL   R14,CHKSUM                                               06270000
  628.          CR    R6,R5              COMPARE CHKSUMS                       06280000
  629.          BZ    CIOKAY             OK CONTINUE                           06290000
  630.          SR    R8,R8              RETURN WITH ZERO LENGTH               06300000
  631.          B     CI99                                                     06310000
  632. *                                                                       06320000
  633. CIOKAY   LR    R2,R1              TARGET BUFFER                         06330000
  634.          LA    R1,ZBUFFER         SOURCE BUFFER                         06340000
  635.          LR    R3,R8              LOOP COUNTER                          06350000
  636. *                                                                       06360000
  637. CILOOP   CLC   0(1,R1),ESCCHAR    IS THIS THE ESCAPE CHARACTER?         06370000
  638.          BNZ   CI9                NO SO JUST CONTINUE                   06380000
  639.          LA    R1,1(,R1)          INC. INPUT POINTER                    06390000
  640.          BCTR  R8,0               DEC. LENGTH COUNTERS                  06400000
  641.          S     R3,=F'1'                                                 06410000
  642.          BZ    BADFMT             SHOULD NEVER GO TO 0 HERE             06420000
  643. *                                                                       06430000
  644.          CLC   0(1,R1),ESCCHAR    NOW IS THIS THE ESCAPE CHARACTER?     06440000
  645.          BZ    CI9                CODE FOR ESCAPE IS ITSELF             06450000
  646. *                                                                       06460000
  647.          NI    0(R1),X'0F'        GET RID OF HIGH NIBBLE                06470000
  648.          SR    R9,R9              USE THE ESCAPE CODE                   06480000
  649.          IC    R9,0(,R1)            AS INDEX INTO TABLE                 06490000
  650.          IC    R9,CITABLE(R9)     REPLACE THE CHARACTER                 06500000
  651.          STC   R9,0(,R1)          PUT IT BACK INTO BUFFER               06510000
  652. *                                                                       06520000
  653. CI9      MVC   0(1,R2),0(R1)      COPY THE CHARACTER                    06530000
  654.          LA    R1,1(,R1)          INC. INPUT POINTER                    06540000
  655.          LA    R2,1(,R2)          INC. OUTPUT POINTER                   06550000
  656.          BCT   R3,CILOOP          GO FOR THE NEXT ONE                   06560000
  657. *                                                                       06570000
  658. CI99     L     R14,CISR14         RESTORE &                             06580000
  659.          BR    R14                   RETURN                             06590000
  660.          EJECT                                                          06600000
  661. *---------------------------------------------------------------------* 06610000
  662. *      ROUTINE TO STRIP HIGH ORDER BITS & STORE IN EVERY 8TH BYTE.    * 06620000
  663. *      ON ENTRY:     R8 CONTAINS LENGTH OF ORIGINAL STRING            * 06630000
  664. *                    R1 CONTAINS POINTER TO SOURCE BUFFER             * 06640000
  665. *      ON EXIT:      R8 CONTAINS LENGTH OF OUTPUT STRING              * 06650000
  666. *                    R1 CONTAINS POINTER TO NEW SOURCE BUFFER         * 06660000
  667. *---------------------------------------------------------------------* 06670000
  668. BITSTRP  DS    0H                                                       06680000
  669.          L     R2,TBUFFER         TARGET BUFFER                         06690000
  670.          LR    R3,R8              LOOP COUNT                            06700000
  671. *                                                                       06710000
  672. BITS2    SR    R5,R5              WHERE THE HIGH BITS GET PUT           06720000
  673.          LTR   R3,R3              IS THERE ANYTHING LEFT?               06730000
  674.          BC    12,BITS6           R3 <= 0  RETURN                       06740000
  675.          LA    R7,7               NUMBER OF BYTES TO CONSIDER AT ONCE   06750000
  676.          SR    R3,R7              REDUCE LENGTH REMAINING               06760000
  677.          BC    10,BITS0           DID NOT GO NEGATIVE                   06770000
  678.          AR    R7,R3              IF IT DID, REDUCE CONSIDERATION       06780000
  679. *                                                                       06790000
  680. BITS0    IC    R6,0(,R1)          GET NEXT CHAR                         06800000
  681.          TM    0(R1),X'80'        IS THE HIGH BIT ON?                   06810000
  682.          LA    R1,1(,R1)            AND INC. POINTER                    06820000
  683.          BC    8,BITS1            IF NOT SKIP..                         06830000
  684.          O     R5,=F'128'         ELSE ADD A BIT TO 8TH BYTE            06840000
  685. BITS1    SRL   R5,1               SLIDE THE BIT DOWN.                   06850000
  686.          N     R6,=F'127'         GET RID OF HIGH BIT IN ORIGINAL BYTE. 06860000
  687.          STCM  R6,1,0(R2)         PUT BYTE INTO OUTPUT BUFFER           06870000
  688.          LA    R2,1(,R2)            AND INC. POINTER.                   06880000
  689.          BCT   R7,BITS0           GO & GET THE NEXT BYTE.               06890000
  690. *                                                                       06900000
  691.          CR    R3,R7              WAS THIS LAST FILL LESS THAN 7 BYTES? 06910000
  692.          BC    10,BITS4           DETERMINED BY LENGTH REMAINING < 0    06920000
  693.          MH    R3,=H'-1'          IF SO WE SHIFT BY THE DIFFERENCE.     06930000
  694. BITS5    SRL   R5,1                                                     06940000
  695.          BCT   R3,BITS5                                                 06950000
  696. BITS4    STCM  R5,1,0(R2)         PUT 8TH BYTE INTO OUTPUT BUFFER       06960000
  697.          LA    R2,1(,R2)            AND INC. POINTER.                   06970000
  698.          LA    R8,1(,R8)          INC LENGTH OF STRING TO SEND.         06980000
  699.          B     BITS2                                                    06990000
  700. *                                                                       07000000
  701. BITS6    L     R1,TBUFFER         RETURN SOURCE BUFFER FOR COPYOUT      07010000
  702.          BR    R14                                                      07020000
  703.          EJECT                                                          07030000
  704. *---------------------------------------------------------------------* 07040000
  705. *        COPY DATA FROM PROG BUFFER TO OUT BOUND BUFFER               * 07050000
  706. *        SUBSTITUTE ESCAPE SEQUENCES FOR DANGEROUS CHARACTERS         * 07060000
  707. *        ON ENTRY:  R1 CONTAINS SOURCE BUFFER                         * 07070000
  708. *                   R8 CONTAINS LENGTH                                * 07080000
  709. *        ON EXIT:   R6 CONTAINS CHKSUM                                * 07090000
  710. *                   R8 CONTAINS LENGTH                                * 07100000
  711. *---------------------------------------------------------------------* 07110000
  712. COPYOUT  DS    0H                                                       07120000
  713.          ST    R14,COSR14                                               07130000
  714.          LA    R2,ZBUFFER         TARGET BUFFER                         07140000
  715.          LR    R3,R8              LOOP COUNTER                          07150000
  716.          SR    R7,R7              WORKING REGISTER                      07160000
  717. *                                                                       07170000
  718. COLOOP   IC    R7,0(,R1)          LOAD THE NEXT CHARACTER               07180000
  719.          CLC   0(1,R1),ESCCHAR    IS THIS THE ESCAPE CHARACTER?         07190000
  720.          BZ    CO8                CODE FOR ESCAPE IS ITSELF             07200000
  721.          LA    R5,COTABLE         TABLE OF CHARACTERS                   07210000
  722.          LA    R9,COTABLEN        LENGTH OF TABLE                       07220000
  723. *                                                                       07230000
  724. CO2      CLC   0(1,R1),0(R5)      IS THIS A DANGEROUS?                  07240000
  725.          BZ    CO7                A HIT!                                07250000
  726.          LA    R5,1(,R5)          NEXT ENTRY                            07260000
  727.          BCT   R9,CO2                                                   07270000
  728.          B     CO9                NO SUBSTITUTIONS                      07280000
  729. *                                                                       07290000
  730. CO7      LA    R9,COTABLE                                               07300000
  731.          SR    R5,R9              GET THE OFFSET INTO THE TABLE         07310000
  732.          STC   R5,0(,R1)          STORE THE INDEX                       07320000
  733.          OI    0(R1),X'40'           AND MAKE AN ASCII CHARACTER        07330000
  734. *                                                                       07340000
  735. CO8      MVC   0(1,R2),ESCCHAR    SUBSTITUTE THE ESCAPE CHAR            07350000
  736.          LA    R2,1(,R2)          INC. OUTPUT POINTER                   07360000
  737.          LA    R8,1(,R8)          INC. LENGTH COUNTER                   07370000
  738. *                                                                       07380000
  739. CO9      MVC   0(1,R2),0(R1)      COPY THE CHARACTER                    07390000
  740.          LA    R1,1(,R1)          INC. INPUT POINTER                    07400000
  741.          LA    R2,1(,R2)          INC. OUTPUT POINTER                   07410000
  742.          BCT   R3,COLOOP          GO FOR THE NEXT ONE                   07420000
  743. *                                                                       07430000
  744.          LA    R2,ZBUFFER         TARGET BUFFER                         07440000
  745.          BAL   R14,CHKSUM         GO CALCULATE THE CHKSUM               07450000
  746.          L     R14,COSR14         RESTORE &                             07460000
  747.          BR    R14                   RETURN                             07470000
  748.          EJECT                                                          07480000
  749. *---------------------------------------------------------------------* 07490000
  750. *   PERFORM A 16 BIT ONES COMPLEMENT CHECKSUM ON PASSED FIELD.        * 07500000
  751. *   IF NECESSARY, FIELD IS ZERO PADDED ON RIGHT FOR COMPUTATION.      * 07510000
  752. *     ON ENTRY: R2 CONTAINS FIELD                                     * 07520000
  753. *               R8 CONTAINS LENGTH (PRESERVED)                        * 07530000
  754. *     ON EXIT:  R6 CONTAINS ONES COMPLEMENT OF CHECKSUM               * 07540000
  755. *---------------------------------------------------------------------* 07550000
  756. CHKSUM   DS    0H                                                       07560000
  757.          LR    R3,R2                                                    07570000
  758.          AR    R3,R8               POINT TO END OF BUFFER               07580000
  759.          MVI   0(R3),X'00'         STORE ZERO AT END OF BUFFER          07590000
  760.          LR    R3,R8               LENGTH PASSED IN BYTES               07600000
  761.          LA    R3,1(,R3)           ROUND UP                             07610000
  762.          SRL   R3,1                NUMBER OF HALFWORDS                  07620000
  763.          SR    R6,R6               CLEAR CHECKSUM BUFFER                07630000
  764. *                                                                       07640000
  765. CKLOOP   LH    R7,0(,R2)           GET NEXT HALFWORD                    07650000
  766.          N     R7,=X'0000FFFF'     GET RID OF SIGN EXTENSION            07660000
  767.          AR    R6,R7               ADD TO SUM                           07670000
  768.          C     R6,=X'00010000'     TEST CARRY OUT OF HALFWORD           07680000
  769.          BC    4,CKL1              SKIP IF NO CARRY                     07690000
  770.          LA    R6,1(,R6)           ADD IN CARRY                         07700000
  771.          N     R6,=X'0000FFFF'     GET RID OF CARRY INDICATION          07710000
  772. CKL1     LA    R2,2(,R2)           ADVANCE TO NEXT HALFWORD             07720000
  773.          BCT   R3,CKLOOP           LOOP TILL DONE                       07730000
  774. *                                                                       07740000
  775.          X     R6,=X'0000FFFF'     MAKE RESULT ONES COMPLEMENT          07750000
  776.          BR    R14                 RETURN                               07760000
  777. *---------------------------------------------------------------------* 07770000
  778. *        COMPLIMENTARY ROUTINES FOR BINARY TO CHARACTER CONVERSION    * 07780000
  779. *                  R1 CONTAINS POINTER TO STRING                      * 07790000
  780. *                  R6 CONTAINS BINARY VALUE (HALFWORD)                * 07800000
  781. *---------------------------------------------------------------------* 07810000
  782. BIN2ASC  DS    0H                                                       07820000
  783.          LR    R9,R6               WE NEED 2 COPIES OF NUMBER           07830000
  784.          N     R6,=X'0000F0F0'     GET NIBBLES 0 & 2                    07840000
  785.          SRL   R6,4                MOVE TO LOW HALF OF BYTES            07850000
  786.          N     R9,=X'00000F0F'     GET NIBBLES 1 & 3                    07860000
  787.          STCM  R6,2,0(R1)          STORE NIBBLES IN 4 BYTES             07870000
  788.          STCM  R9,2,1(R1)                                               07880000
  789.          STCM  R6,1,2(R1)                                               07890000
  790.          STCM  R9,1,3(R1)                                               07900000
  791.          OC    0(4,R1),CHARSKEL    MAKE THEM CHARACTERS                 07910000
  792.          BR    R14                   RETURN.                            07920000
  793. *                                                                       07930000
  794. ASC2BIN  ICM   R6,2,0(R1)                                               07940000
  795.          ICM   R9,2,1(R1)                                               07950000
  796.          ICM   R6,1,2(R1)                                               07960000
  797.          ICM   R9,1,3(R1)                                               07970000
  798.          SLL   R6,4                THESE GUYS ARE THE HIGH NIBBLES      07980000
  799.          N     R6,=X'0000F0F0'     ISOLATE THE INFORMATION WE WANT      07990000
  800.          N     R9,=X'00000F0F'                                          08000000
  801.          OR    R6,R9               NOW PUT ALL 4 NIBBLES TOGETHER       08010000
  802.          BR    R14                                                      08020000
  803.          EJECT                                                          08030000
  804. *---------------------------------------------------------------------* 08040000
  805. *   ENCAPSULATE FT3270 DATA PACKET INTO FT3270 XFER PACKET & SEND IT. * 08050000
  806. *   WAIT FOR REPLY BUFFER AND VERIFY ITS VALIDITY                     * 08060000
  807. *   ON ENTRY: R6 CONTAINS CHKSUM                                      * 08070000
  808. *             R8 CONTAINS LENGTH OF DATA BUFFER                       * 08080000
  809. *   ON EXIT:  R6 CONTAINS CHKSUM                                      * 08090000
  810. *             R8 CONTAINS LENGTH OF DATA BUFFER  (0 IF LENGTH ERROR)  * 08100000
  811. *   SCRATCH:  R1, R2                                                  * 08110000
  812. *---------------------------------------------------------------------* 08120000
  813. SNDPKT   DS    0H                                                       08130000
  814.          ST    R14,XSND14                                               08140000
  815. *                                                                       08150000
  816.          LA    R1,ZCHKSUM          PUT CHKSUM IN XFER HEADER            08160000
  817.          BAL   R14,BIN2ASC                                              08170000
  818.          LR    R6,R8                                                    08180000
  819.          LA    R1,ZLENGTH          PUT LENGTH IN XFER HEADER            08190000
  820.          BAL   R14,BIN2ASC                                              08200000
  821. *                                                                       08210000
  822.          MVC   ZSNDBUFF+4(3),Z7171 FIX UP HEADER STRING                 08220000
  823.          LA    R2,ZBUFFER                                               08230000
  824.          AR    R2,R8               POINT TO END OF DATA                 08240000
  825.          MVI   0(R2),X'7F'         PUT IN STRING TERMINATOR             08250000
  826. *                                                                       08260000
  827.          A     R8,=F'16'           HEADER + LEN + CHKSUM + X'7F'        08270000
  828.          STH   R8,ZSND+6           COMPLETE THE CCW                     08280000
  829.          LA    R0,ZSND             POINT TO THE CCW AND                 08290000
  830.          BAL   R14,IOREQ             GO WRITE IT.                       08300000
  831.          BAL   R14,IOWAIT          WAIT FOR AN ATTENTION.               08310000
  832.          LA    R0,ZRCV             CCW FOR READ.                        08320000
  833.          BAL   R14,IOREQ           GET THE BUFFER FROM THE PC.          08330000
  834.          CLI   ZRCVBUFF,X'E8'      THIS BYTE'S FOR 7171!                08340000
  835.          BNZ   LOSTTN                                                   08350000
  836. *                                                                       08360000
  837.          LA    R8,BUFFSIZE         MAXIMUM INPUT BUFFER SIZE            08370000
  838.          SR    R8,R1               RESIDUAL COUNT FROM CONSOLE READ     08380000
  839.          S     R8,=F'12'           HDR + LEN + CHKSUM + CR              08390000
  840.          BC    12,SP2              TOO SMALL A PACKET RETURNED          08400000
  841.          LA    R1,ZLENGTH          PROCESS LENGTH OF RETURNED PACKET    08410000
  842.          BAL   R14,ASC2BIN                                              08420000
  843.          CR    R6,R8               SEE IF LENGTHS AGREE                 08430000
  844.          BZ    SP1                                                      08440000
  845. SP2      SR    R8,R8               BAD RETURN CODE                      08450000
  846.          B     SP3                                                      08460000
  847. *                                                                       08470000
  848. SP1      LA    R1,ZCHKSUM          GET THE CHKSUM                       08480000
  849.          BAL   R14,ASC2BIN                                              08490000
  850. SP3      L     R14,XSND14                                               08500000
  851.          BR    R14                 RETURN.                              08510000
  852.          EJECT                                                          08520000
  853. *---------------------------------------------------------------------* 08530000
  854. *    SUBROUTINE TO PERFORM 3270 FULL-SCREEN I/O.                      * 08540000
  855. *    THIS WAS COPIED FROM THE "SPAM" PROGRAM WRITTEN BY LARRY CHACE   * 08550000
  856. *    R0 POINTS TO THE CHANNEL PROGRAM.                                * 08560000
  857. *    R1 RETURNS THE RESIDUAL COUNT.                                   * 08570000
  858. *    (IN 1991, LARRY CHACE RETURNED TO MAKE THIS RUN IN XA-MODE.)    XA 08580000
  859. *---------------------------------------------------------------------* 08590000
  860. IOREQ    DS    0H                                                       08600000
  861.          ST    R14,IORSR14         SAVE OUR RETURN ADDRESS.          XA 08610000
  862.          L     R1,XTERMADD         BE SURE THAT ANY                     08620000
  863. IOR010   BAL   R14,TIOIT             PREVIOUS OPERATION              XA 08630000
  864.          BC    6,IOR010              HAS COMPLETED                      08640000
  865.          BC    1,GONEAWAY            CORRECTLY.                         08650000
  866. IOR020   DIAG  R0,R1,X'58'         START THE CHANNEL PROGRAM            08660000
  867.          BC    8,IOR030              AND CONTINUE IF STARTED.           08670000
  868.          BC    4,IOR040            CHECK FOR ANY STATUS BITS.           08680000
  869.          BC    2,IOR020            LOOP IF IT WAS BUSY.                 08690000
  870.          BC    1,GONEAWAY          QUIT IF CONSOLE IS GONE.             08700000
  871. IOR030   BAL   R14,TIOIT           WAIT FOR THE 'SIO'                XA 08710000
  872.          BC    2,IOR030              TO COMPLETE.                       08720000
  873.          BC    1,GONEAWAY          QUIT IF CONSOLE IS GONE.             08730000
  874. IOR040   CLI   IOX45,X'00'         FOR CHANNEL ERRORS                   08740000
  875.          BNE   GONEAWAY              WE CAN ONLY QUIT.                  08750000
  876.          CLI   IOX44,X'0C'         IF IT COMPLETED NORMALLY,            08760000
  877.          BE    IOR060                THEN WE ARE ALL DONE.              08770000
  878.          CLI   IOX44,X'08'         IF ONLY CHANNEL END,                 08780000
  879.          BE    IOR050                GO WAIT FOR DEVICE END.            08790000
  880.          CLI   IOX44,X'8E'         IF CP STOLE THE SCREEN,              08800000
  881.          BE    GONEAWAY              TAKE THE 'REPEAT' EXIT.            08810000
  882.          TM    IOX44,X'B0'         FOR ATTN, CUE, OR BUSY,              08820000
  883.          BNZ   IOR020                RESTART THE DIAGNOSE.              08830000
  884.          TM    IOX44,X'0C'         IF NEITHER CE NOR DE,                08840000
  885.          BZ    IOR020                THEN TRY IT ONCE AGAIN.            08850000
  886. IOR050   BAL   R14,TIOIT           WAIT UNTIL DEVICE END             XA 08860000
  887.          BC    2,IOR050              FINALLY COMES IN.                  08870000
  888.          BC    1,GONEAWAY          QUIT IF CONSOLE IS GONE.             08880000
  889. IOR060   DS    0H                                                       08890000
  890.          LH    R1,IOX46            LOAD THE RESIDUAL COUNT.             08900000
  891.          L     R14,IORSR14         RESTORE OUR RETURN ADDRESS.       XA 08910000
  892.          LTR   R14,R14             RETURN SUCCESSFULLY                  08920000
  893.          BR    R14                   WITH CC = BNZ (BNE).               08930000
  894.          SPACE 1                                                     XA 08940000
  895. *                                                                    XA 08950000
  896. *        ROUTINE TO PERFORM OR SIMULATE A "TEST I/O" INSTRUCTION.    XA 08960000
  897. *                                                                    XA 08970000
  898. *        RETURN WITH:                                                XA 08980000
  899. *              CC=0 MASK=8 FOR DEVICE AVAILABLE.                     XA 08990000
  900. *              CC=1 MASK=4 FOR CSW STORED.                           XA 09000000
  901. *              CC=2 MASK=2 FOR DEVICE BUSY.                          XA 09010000
  902. *              CC=3 MASK=1 FOR DEVICE VANISHED.                      XA 09020000
  903. *                                                                    XA 09030000
  904. TIOIT    DS    0H                                                    XA 09040000
  905.          TM    NUCMFLAG,NUCMXA     IF WE ARE IN XA MODE,             XA 09050000
  906.          BO    TIO010                THEN GO USE TSCH.               XA 09060000
  907.          TIO   0(R1)               FOR 370 MODE, DO THE TIO AND      XA 09070000
  908.          MVC   IOXCSW,X'44'          GET THE CSW STUFF.              XA 09080000
  909.          BR    R14                 RETURN WITH CC SET.               XA 09090000
  910. TIO010   DS    0H                                                    XA 09100000
  911.          ST    R1,TIOSR1           SAVE THE DEVICE ADDRESS.          XA 09110000
  912.          L     R1,TIOSUBCH         GET THE SUBCHANNEL NUMBER.        XA 09120000
  913.          TSCH  XAIRB               FOR STATUS, GET IT.               XA 09130000
  914.          BC    1,TIO090            QUIT IF IT DISAPPEARED.           XA 09140000
  915.          BC    8,TIO080            GET ANY STORED STATUS.            XA 09150000
  916.          MVC   IOXCSW,TIOCSWOK     FOR NO STATUS, FAKE THE CSW       XA 09160000
  917.          CR    R14,R14               AND RETURN CC=0 MASK=8.         XA 09170000
  918.          B     TIO090                                                XA 09180000
  919.          SPACE 1                                                     XA 09190000
  920. TIO080   DS    0H                                                    XA 09200000
  921.          MVC   IOX44(4),XASCSW+8   GET THE STORED STATUS AND SET     XA 09210000
  922.          TM    *,X'FF'               CC =1 MASK=4.                   XA 09220000
  923.          SPACE 1                                                     XA 09230000
  924. TIO090   DS    0H                                                    XA 09240000
  925.          L     R1,TIOSR1           RESTORE THE DEVICE ADDRESS.       XA 09250000
  926.          BR    R14                 RETURN HAPPILY.                   XA 09260000
  927.          SPACE 1                                                     XA 09270000
  928. TIOCSWOK DC    X'0C000000'         A FAKE GOOD CSW STATUS.           XA 09280000
  929.          SPACE 2                                                     XA 09290000
  930. *---------------------------------------------------------------------* 09300000
  931. *        ROUTINE TO WAIT FOR THE I/O INTERRUPT.                       * 09310000
  932. *                                                                    XA 09320000
  933. *        THIS CAN USED ONLY FOR CONSOLE ATTENTION INTERRUPTS.        XA 09330000
  934. *                                                                    XA 09340000
  935. *---------------------------------------------------------------------* 09350000
  936. IOWAIT   DS    0H                                                       09360000
  937.          ENABLE INTTYPE=CONSOLE                                      XA 09370000
  938.          LPSW  IOWPSW              WAIT NOW FOR THE INTERRUPT.          09380000
  939. IOWAKE   BR    R14                                                      09390000
  940.          EJECT                                                          09400000
  941. *---------------------------------------------------------------------* 09410000
  942. *     THESE VARIABLES ARE USED THROUGHOUT THE PROGRAM                 * 09420000
  943. *---------------------------------------------------------------------* 09430000
  944.          DS    0D                                                    XA 09440000
  945. SAVEAREA DS    18F                                                      09450000
  946.          SPACE 1                                                     XA 09460000
  947. *---------------------------------------------------------------------* 09470000
  948. *        DATA AREAS FOR I/O ROUTINES                                  * 09480000
  949. *---------------------------------------------------------------------* 09490000
  950. XIONPSW  DS    D                   CMS'S I/O NEW PSW.                   09500000
  951. XEXNPSW  DS    D                   CMS'S EXT NEW PSW.                   09510000
  952. IOWPSW   DC    X'00020000',A(0)    (THIS IS SET IN 'SETUP'.)         XA 09520000
  953. XTERMADD DS    F                   TERMINAL ADDRESS.                    09530000
  954.          SPACE 1                                                     XA 09540000
  955. SCHIB    DS    0D,13F              THE SUBCHANNEL INFO BLOCK.        XA 09550000
  956.          ORG   SCHIB+5                                               XA 09560000
  957. SCHCTL   DS    X                   A FLAG BYTE:                      XA 09570000
  958. SCHVLD   EQU   B'00000001'           DEVICE NUMBER IS VALID.         XA 09580000
  959.          ORG   SCHIB+6                                               XA 09590000
  960. SCHDEV   DS    H                   DEVICE NUMBER (ADDRESS).          XA 09600000
  961.          ORG   ,                   (MORE RANDOM STUFF.)              XA 09610000
  962. IOXCSW   DS    0F                  THE CSW SECOND HALF:              XA 09620000
  963. IOX44    DS    X                     CSW (X'44').                    XA 09630000
  964. IOX45    DS    X                     CSW (X'45').                    XA 09640000
  965. IOX46    DS    H                     CSW (X'46').                    XA 09650000
  966. TIOSUBCH DS    F                   THE CONSOLE'S SUBCHANNEL NUMBER.  XA 09660000
  967. XAIRB    DS    (0*16)F             THE STANDARD IRB:                 XA 09670000
  968. XASCSW   DS    3F                    THE SUBCHAN STATUS WORD.        XA 09680000
  969.          DS    13F                   (THE OTHER STUFF.)              XA 09690000
  970.          SPACE 1                                                     XA 09700000
  971. *--------------------------------------------------------------------XA 09710000
  972. * GENERAL REGISTER SAVE AREAS FOR SUBROUTINES.                       XA 09720000
  973. *--------------------------------------------------------------------XA 09730000
  974. XESTA14  DS    F                   'INIT' R14 SAVE AREA.             XA 09740000
  975. SHIP14   DS    F                   'SHIPDOWN' R14 SAVE AREA.         XA 09750000
  976. NEGO14   DS    F                   'UNNEGOT' R14 SAVE AREA.          XA 09760000
  977. XCENTRAL DS    15F                 'CENTRAL' SAVE AREA.              XA 09770000
  978. CISR14   DS    F                   'COPYIN' R14 SAVE AREA.           XA 09780000
  979. COSR14   DS    F                   'COPYOUT' R14 SAVE AREA.          XA 09790000
  980. XSND14   DS    F                   'SNDPKT' R14 SAVE AREA.           XA 09800000
  981. IORSR14  DS    F                   'IOREQ' R14 SAVE AREA.            XA 09810000
  982. TIOSR1   DS    F                   'IOREQ' R1 SAVE AREA.             XA 09820000
  983.          SPACE 1                                                     XA 09830000
  984. *--------------------------------------------------------------------XA 09840000
  985. * GENERAL BUFFERS AND THINGS AND STUFF.                              XA 09850000
  986. *--------------------------------------------------------------------XA 09860000
  987. BUFFSIZE EQU   16*256-10      MAX SEND & RCV BUFFER SIZE                09870000
  988. TNFTLEN  EQU   2000           BUFFER SIZES FOR EACH PC PROGRAM          09880000
  989. C19FTLEN EQU   150                                                      09890000
  990. FTLEN    DS    1F             DATA BLOCK SIZE TO DOWNLOAD               09900000
  991. *                                                                       09910000
  992. TBUFFER  DS    AL(4)          POINTER TO TEMPORARY STAGING BUFFER       09920000
  993. RETCODE  DC    F'0'           SAVE THE RETURN CODE.                     09930000
  994. RETCMS   DC    F'0'           SAVE THE RETURN CODE FROM CMS MACROS      09940000
  995. DW64K    DC    A((64*1024)/8) SIZE OF CMS READ/WRITE BUFFER             09950000
  996. DW16K    DC    A((16*1024)/8) SIZE OF FT3270 BUFFER                     09960000
  997. UNNFLAG  DC    X'0'           FLAG TO PREVENT UNNEGOT LOOP              09970000
  998. WRFLAG   DC    X'0'           FLAG TO INDICATE LAST RECORD NOT PADDED.  09980000
  999. C19FLAG  DS    1C             FLAG TO INDICATE RUNNING C19 ON PC.       09990000
  1000. NOSTRIP  DC    X'0'           DO NOT PERFORM 8 FOR 7 CONVERSION.        10000000
  1001. ESCCHAR  DC    X'7E'          THE ESCAPE CHARACTER!                     10010000
  1002. HEXEOR   DC    X'0A'          INDICATES END-OF-RECORD                   10020000
  1003. CHARSKEL DC    X'40404040'    MAKE CHARACTERS FROM BINARY               10030000
  1004. *                                                                       10040000
  1005. COTABLEN EQU   5                                                        10050000
  1006. COTABLE  DC    X'0211137FFF'  TABLE OF DANGEROUS CHARACTERS             10060000
  1007. CITABLE  DC    X'02070D11137FFF'    OUR TABLE OF REPLACEMENTS           10070000
  1008.          SPACE 1                                                     XA 10080000
  1009. *---------------------------------------------------------------------* 10090000
  1010. *     COMMANDS TO SEND DIRECTLY TO CP VIA DIAGNOSE 8.                 * 10100000
  1011. *---------------------------------------------------------------------* 10110000
  1012.          DS    0F                                                       10120000
  1013. CPMSGOFF DC    C'SET MSG OFF'                                           10130000
  1014.          DC    X'15'                                                    10140000
  1015.          DC    C'SET WNG OFF'                                           10150000
  1016.          DC    X'15'                                                    10160000
  1017.          DC    C'SET IMSG OFF'                                          10170000
  1018. CPOFFLEN EQU   *-CPMSGOFF                                               10180000
  1019. *                                                                       10190000
  1020. CPMSGON  DC    C'SET MSG ON'                                            10200000
  1021.          DC    X'15'                                                    10210000
  1022.          DC    C'SET WNG ON'                                            10220000
  1023.          DC    X'15'                                                    10230000
  1024.          DC    C'SET IMSG ON'                                           10240000
  1025. CPONLEN  EQU   *-CPMSGON                                                10250000
  1026.          EJECT                                                          10260000
  1027. *---------------------------------------------------------------------* 10270000
  1028. *             EBCDIC / ASCII TRANSLATION TABLES                       * 10280000
  1029. *---------------------------------------------------------------------* 10290000
  1030.          DS    0D                                                    XA 10300000
  1031. EBCDTAB  DC    X'00010203372D2E2F1605250B0C0D0E0F'                      10310000
  1032.          DC    X'101112133C3D322618193F271C1D1E1F'                      10320000
  1033.          DC    X'405A7F7B5B6C507D4D5D5C4E6B604B61'                      10330000
  1034.          DC    X'F0F1F2F3F4F5F6F7F8F97A5E4C7E6E6F'                      10340000
  1035.          DC    X'7CC1C2C3C4C5C6C7C8C9D1D2D3D4D5D6'                      10350000
  1036.          DC    X'D7D8D9E2E3E4E5E6E7E8E9ADE0BD5F6D'                      10360000
  1037.          DC    X'79818283848586878889919293949596'                      10370000
  1038.          DC    X'979899A2A3A4A5A6A7A8A9C04FD0A107'                      10380000
  1039. *                                                                       10390000
  1040.          DS    0D                                                    XA 10400000
  1041. ASCIITAB DC    X'000102030009007F0000000B0C0D0E0F'                      10410000
  1042.          DC    X'1011121300000800181900001C1D1E1F'                      10420000
  1043.          DC    X'00000000000D171B0000000000050607'                   LC 10430000
  1044.          DC    X'0000160000000004000000001415001A'                      10440000
  1045.          DC    X'200000000000000000005C2E3C282B7C'                      10450000
  1046.          DC    X'2600000000000000000021242A293B5E'                      10460000
  1047.          DC    X'2D2F00000000000000007C2C255F3E3F'                      10470000
  1048.          DC    X'000000000000000000603A2340273D22'                      10480000
  1049.          DC    X'00616263646566676869007B00000000'                      10490000
  1050.          DC    X'006A6B6C6D6E6F707172007D00000000'                      10500000
  1051.          DC    X'007E737475767778797A0000005B0000'                      10510000
  1052.          DC    X'000000000000000000000000005D0000'                      10520000
  1053.          DC    X'7B414243444546474849000000000000'                      10530000
  1054.          DC    X'7D4A4B4C4D4E4F505152000000000000'                      10540000
  1055.          DC    X'5C00535455565758595A000000000000'                      10550000
  1056.          DC    X'303132333435363738397C0000000000'                      10560000
  1057.          EJECT                                                          10570000
  1058. *---------------------------------------------------------------------* 10580000
  1059. *     THESE VARIABLES ARE USED BY FTCMS AS WELL                       * 10590000
  1060. *---------------------------------------------------------------------* 10600000
  1061. FTCOMMON DS    0F                                                       10610000
  1062. *                                                                       10620000
  1063. BYTELEFT DS    1F             AVAILABLE SPACE ON SAME                   10630000
  1064. NUMBYTES DS    1F             SIZE OF FILE TO BE DOWNLOADED             10640000
  1065. XNOREC   DS    1F             NUMBER OF RECORDS TO DOWNLOAD             10650000
  1066. CLRECL   DC    X'0000FFFF'    DEFAULT LENGTH FOR FIXED LENGTH UPLOAD    10660000
  1067. FSPECLEN DS    1F             LENGTH OF NAME OF DOS FILESPEC            10670000
  1068. CRECFM   DC    F'0'           RECFM FOR UPLOAD                          10680000
  1069. BINTEXT  DS    CL(1)          INDICATES WHETHER TO PERFORM CONVERSION   10690000
  1070. UPDOWN   DS    CL(1)          WHETHER UPLOAD OR DOWNLOAD                10700000
  1071. NEGO     DS    0F             NEGOTIATION STRING                        10710000
  1072.          DC    X'08'          GRAPHICS ESCAPE, FOLLOWED BY              10720000
  1073.          DS    CL(1)          THE PARTICULAR NEGOTIATION CODE,          10730000
  1074.          DS    CL(4)          THE LENGTH IF DOWNLOAD,                   10740000
  1075.          DS    CL(1)          ANOTHER BYTE OF FLAG BITS, AND            10750000
  1076.          DS    CL(80)         FOLLOWED BY ROOM FOR THE DOS FILE PATH.   10760000
  1077.          SPACE 1                                                     XA 10770000
  1078. *---------------------------------------------------------------------* 10780000
  1079. *                          LITERAL AREA                               * 10790000
  1080. *---------------------------------------------------------------------* 10800000
  1081.          LTORG                                                          10810000
  1082.          EJECT                                                          10820000
  1083. *---------------------------------------------------------------------* 10830000
  1084. *                    CCW'S MESSAGES, & BUFFERS                        * 10840000
  1085. *---------------------------------------------------------------------* 10850000
  1086. ZERASE   CCW   X'19',0,X'20',1          INITIAL WRITE TO                10860000
  1087.          ORG   ZERASE+5                    CLEAR THE SCREEN             10870000
  1088.          DC    X'FF'                       (AVOID 'MORE'.)              10880000
  1089.          ORG    ,                                                       10890000
  1090. XESTAB   DC    X'1B1B'                                                  10900000
  1091.          DC    X'14'                OUR CURRENT VERSION NUMBER          10910000
  1092.          DC    C'NOT ACCEPTABLE WORKSTATION FOR FILE TRANSFER; PRESS'   10920000
  1093.          DC    C' ENTER TO RETURN.    '                                 10930000
  1094. VTABLE   DC    X'14FF0C0DFF'        PC PROGRAM VERSIONS TO ACCEPT       10940000
  1095. *                                                                       10950000
  1096. ZSND     CCW   X'29',ZSNDBUFF,X'20',0                                   10960000
  1097.          ORG   ZSND+5                                                   10970000
  1098.          DC    X'90'                                                    10980000
  1099.          ORG   ,                                                        10990000
  1100. ZRCV     CCW   X'2A',ZRCVBUFF,X'20',BUFFSIZE                            11000000
  1101.          ORG   ZRCV+5                                                   11010000
  1102.          DC    X'80'                                                    11020000
  1103.          ORG   ,                                                        11030000
  1104. Z7171    DC    X'110001'           REPLACE 3 BYTES OF ZSNDBUFF          11040000
  1105.          DS    0F                                                       11050000
  1106. *                                                                       11060000
  1107. ZSNDBUFF DC    X'03115D7F110001'   7 BYTE HEADER FOR CP & 7171          11070000
  1108. ZRCVBUFF EQU   ZSNDBUFF+4          7171 FILLS IN 3 BYTES.               11080000
  1109. ZLENGTH  DS    CL(4)               LENGTH OF DATA                       11090000
  1110. ZCHKSUM  DS    CL(4)               CHECKSUM                             11100000
  1111. ZBUFFER  DS    CL(BUFFSIZE)        SEND & RECEIVE BUFFER                11110000
  1112. *                                                                       11120000
  1113.          PRINT NOGEN                                                    11130000
  1114.          REGEQU                                                         11140000
  1115.          NUCON ,                                                     XA 11150000
  1116.          END   FT3270                                                   11160000
  1117.